<?php  
class KeywordsController extends Controller  
{  
    private $_searchFiles = 'runtime.search';    //необходимо создать папку для создания индекса
      
    public function init(){  
        Yii::import('application.vendors.*');  
        require_once('Zend/Search/Lucene.php');  
          
        Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('utf-8');  
        Zend_Search_Lucene_Analysis_Analyzer::setDefault(  
            new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive ()  
        );  
        parent::init();   
    }  
   
    public function actionCreate()              //Создаёт индекс по таблицам 
    {      
        $search = new Zend_Search_Lucene(Yii::getPathOfAlias('application.' . $this->_searchFiles), true);  
   
        /** Индекс для таблицы Page   */
        $apartments = Page::model()->findAll();                                 //модель в которой будем искать информацию 
        foreach($apartments as $item){  
            $searchDocument = new Zend_Search_Lucene_Document();  
   
            $searchDocument->addField(Zend_Search_Lucene_Field::Text('title', CHtml::encode($item->title), 'utf-8'));                                                                 //Ищем в поле title БД
            $searchDocument->addField(Zend_Search_Lucene_Field::Text('link', Yii::app()->createUrl('/article/page', array('cat' => $item->category->url, 'pagecontent'=>$item->url)), 'utf-8'));       //ссылка на найденную статью     
            $searchDocument->addField(Zend_Search_Lucene_Field::Text('prev_content', CHtml::encode($item->prev_content), 'utf-8'));                                                  //Ищем в поле prev_content БД 
            $searchDocument->addField(Zend_Search_Lucene_Field::Text('full_content', CHtml::encode($item->full_content), 'utf-8'));                                                  //Ищем в поле full_content БД 
   
            $search->addDocument($searchDocument);  
        }  
        
        /** Индекс для таблицы Blogpost   */
        Yii::import('application.modules.admin.modules.blog.models.*');         //Подключение моделей из модуля блога
        $blog = Blogpost::model()->findAll();                                  //модель в которой будем искать информацию 
        foreach($blog as $item){  
            $searchDocument = new Zend_Search_Lucene_Document();  
   
            $searchDocument->addField(Zend_Search_Lucene_Field::Text('title', CHtml::encode($item->title), 'utf-8'));                                            //Ищем в поле title БД
            $searchDocument->addField(Zend_Search_Lucene_Field::Text('link', Yii::app()->createUrl('/blog/fullpost', array('url' => $item->url)), 'utf-8'));     //ссылка на найденную статью
            $searchDocument->addField(Zend_Search_Lucene_Field::Text('prev_content', CHtml::encode($item->prev_content), 'utf-8'));                             //Ищем в поле prev_content БД 
            $searchDocument->addField(Zend_Search_Lucene_Field::Text('full_content', CHtml::encode($item->full_content), 'utf-8'));                              //Ищем в поле full_content БД 
   
            $search->addDocument($searchDocument);  
        }  
   
        $search->commit();  
        echo 'Файлы успешно созданы'; 
    }  
   
   
   
   
    public function actionSearch() {  
        $qs = Yii::app()->getRequest()->getParam('qs', null);  
          
        if ($qs) {  
            $search = new Zend_Search_Lucene(Yii::getPathOfAlias('application.' . $this->_searchFiles));  
            $items = $search->find($qs);  
            $query = Zend_Search_Lucene_Search_QueryParser::parse($qs);   
              
        //    $pages = new CPagination(count($items));    Пагинатор, если нужен
        //    $pages->pageSize = 3;  
              
            $currentPage = Yii::app()->getRequest()->getQuery('page', 1);             
            $first = (int) $currentPage*$pages->pageSize - $pages->pageSize;                                  
            $results = array_slice($items, $first, $pages->pageSize);  
               
            $this->render('search_result', compact('results', 'qs', 'query', 'pages'));  
        }  
    }  
}  